home *** CD-ROM | disk | FTP | other *** search
/ Gold Medal Software 5 / Gold Medal Software - Volume 5 (Gold Medal) (1995).iso / database / cff51b.arj / DUPTEST.C < prev    next >
C/C++ Source or Header  |  1993-10-22  |  29KB  |  845 lines

  1. /* DUPTEST.C */
  2. /* Copyright 1990, 1991, 1992, 1993 Norman D. Culver Ft. Lauderdale, FL */
  3. /*                    All Rights Reserved                                   */
  4.  
  5. #include <stdlib.h>
  6. #include "../cff.h"
  7.  
  8. #define CLOCKS_PER_SECOND 1000000L
  9.  
  10. /* TEST CHOICES */
  11. #define PFLAGS 0
  12. #define MEMFILE 1
  13. #define EXTDMEM 1
  14. #define DOHASH 1
  15. #define DOTREE 1
  16.  
  17. extern int errno;
  18. static void dup_test1(void *hd, void *hd1);
  19. static void dup_test2(void *hd, void *hd1);
  20.  
  21. void
  22. main()
  23. {
  24. void *hxxx;
  25. void *huniq;
  26. void *huniq1;
  27. void *hsxxx;
  28. void *hsxxx1;
  29.  
  30.  
  31.     cfport_settestflags(1);
  32.     cfinit("duptest",512,NULL);
  33.     cfprintf("DUPLICATE ENTRY TESTS.\n");
  34.  
  35.  
  36. #if MEMFILE
  37.     cfprintf("MEMORY FILE\n");
  38.     hxxx = cfopen("MEMORY/XXX",F_RDWR|F_CREAT,NULL);
  39.     if(!hxxx) {
  40.         cfprintf("ERROR: create XXX err=%d\n", errno);
  41.         exit(0);
  42.     }
  43.     huniq = cfopen("MEMORY/XXX",
  44.                     F_RDWR|F_CREAT|F_TEMP|F_UNIQ|F_HUGEDIR, NULL);
  45.     if(!huniq) {
  46.         cfprintf("ERROR: create UNIQUE TEMP FILE0 err=%d\n", errno);
  47.         exit(0);
  48.     }
  49.     huniq1 = cfopen("MEMORY/XXX",
  50.                     F_RDWR|F_CREAT|F_TEMP|F_UNIQ|F_SORTED, NULL);
  51.     if(!huniq) {
  52.         cfprintf("ERROR: create UNIQUE TEMP FILE1 err=%d\n", errno);
  53.         exit(0);
  54.     }
  55. #if PFLAGS
  56.     cfpflags("hxxx", hxxx);
  57.     cfpflags("huniq", huniq);
  58.     cfpflags("huniq1", huniq1);
  59. #endif
  60.     dup_test1(huniq, huniq1);
  61.     dup_test2(huniq, huniq1);
  62. cfprintf("NOW CLOSING\n");
  63.     cfclose(huniq);
  64.     cfclose(huniq1);
  65. #endif /* MEMFILE */
  66.  
  67.  
  68. #if EXTDMEM
  69.     cfprintf("EXTDMEM FILE\n");
  70.     hsxxx = cfopen("EXTDMEM/XXX", F_RDWR|F_CREAT|F_HUGEDIR, NULL);
  71.     if(!hsxxx) {
  72.         cfprintf("ERROR: create EXTDMEM/XXX err=%d\n", errno);
  73.         exit(0);
  74.     }
  75.     hsxxx1 = cfopen("EXTDMEM/XXX1", F_RDWR|F_CREAT|F_SORTED, NULL);
  76.     if(!hsxxx1) {
  77.         cfprintf("ERROR: create EXTDMEM/XXX1 err=%d\n", errno);
  78.         exit(0);
  79.     }
  80.  
  81. #if PFLAGS
  82.     cfpflags("hsxxx", hsxxx);
  83.     cfpflags("hsxxx1", hsxxx1);
  84. #endif
  85.     cfsetlazy(hsxxx);
  86.     cfsetlazy(hsxxx1);
  87.     dup_test1(hsxxx, hsxxx1);
  88.     dup_test2(hsxxx, hsxxx1);
  89. cfprintf("NOW CLOSING\n");
  90.     cfclose(hsxxx1);
  91.     cfclose(hsxxx);
  92.  
  93.     cfprintf("REOPEN EXTDMEM FILE\n");    
  94.     hsxxx = cfopen("EXTDMEM/XXX", F_RDWR, NULL);
  95.     if(!hsxxx) {
  96.         cfprintf("ERROR: reopen EXTDMEM:/XXX err=%d\n", errno);
  97.         exit(0);
  98.     }
  99.     hsxxx1 = cfopen("EXTDMEM/XXX1", F_RDWR, NULL);
  100.     if(!hsxxx1) {
  101.         cfprintf("ERROR: reopen EXTDMEM:/XXX1 err=%d\n", errno);
  102.         exit(0);
  103.     }
  104.     cfsetlazy(hsxxx);
  105.     cfsetlazy(hsxxx1);
  106.     dup_test1(hsxxx,hsxxx1);
  107.     dup_test2(hsxxx,hsxxx1);
  108. cfprintf("NOW CLOSING\n");
  109.     cfunlink(hsxxx, NULL);
  110.     cfunlink(hsxxx1, NULL);
  111. #endif /* EXTDMEM */
  112.  
  113.     cfexit();
  114. } /* END: MAIN */
  115.  
  116. static Item keyval;
  117. static Item newval;
  118.  
  119. static void
  120. dup_test1(void *hd, void *hd1)
  121. {
  122. char *keyname1 = "keyname1";
  123. char *keyname2 = "keyname2";
  124. char *lname1 = "long key name";
  125. char *lname2 = "long key name2";
  126. int result;
  127. long i;
  128. long dupcnt;
  129.  
  130.     cfprintf("Begin dup_test1 SIMPLE DUPS\n");
  131.     if(cfisnew(hd))
  132.     {/* INITIAL DATA  ENTRY */
  133.  
  134.         /* 8 BYTE KEY with OKDUPS */
  135.         for(i = 0; i < 20; ++i)
  136.         {
  137.             keyval.a0 = i+2;
  138. #if DOHASH == 1
  139.             if((result = cfinsert_dupnum(hd, keyname1, 8, &keyval, NULL)) < OK) {
  140.                 cfprintf("CFINSERT hash OKDUPS FAILED at i=%d result=%d\n", i, result);
  141.             }
  142. #endif
  143. #if DOTREE == 1
  144.             if((result = cfinsert_dupnum(hd1, keyname1, 8, &keyval, NULL)) < OK) {
  145.                 cfprintf("CFINSERT tree OKDUPS FAILED at i=%d result=%d\n", i, result);
  146.             }
  147. #endif
  148.         }
  149.  
  150.  
  151.         /* 8 BYTE KEY with CNTDUPS */
  152.         for(i = 0; i < 20; ++i)
  153.         {
  154.             keyval.a0 = i+2;
  155. #if DOHASH == 1
  156.             dupcnt = 0;
  157.             if((result = cfinsert_dupnum(hd, keyname2, 8, &keyval, &dupcnt)) < OK) {
  158.                 cfprintf("CFINSERT hash CNTDUPS FAILED at i=%d result=%d\n", i, result);
  159.             }
  160.             if(dupcnt != i+1)
  161.                 cfprintf("hashinsert CNTDUPS i=%d dupcnt=%d\n", i, dupcnt);
  162. #endif
  163. #if DOTREE == 1
  164.             if((result = cfinsert_dupnum(hd1, keyname2, 8, &keyval, &dupcnt)) < OK) {
  165.                 cfprintf("CFINSERT tree CNTDUPS FAILED at i=%d result=%d\n", i, result);
  166.             }
  167.             if(dupcnt != i+1)
  168.                 cfprintf("treeinsert CNTDUPS i=%d dupcnt=%d\n", i, dupcnt);
  169. #endif
  170.         }
  171.  
  172.         /* LONG KEY with OKDUPS */
  173.         for(i = 0; i < 20; ++i)
  174.         {
  175.             keyval.a0 = i+2;
  176. #if DOHASH == 1
  177.             if((result = cfinsert_dupnum(hd, lname1, strlen(lname1), &keyval, NULL)) < OK) {
  178.                 cfprintf("CFINSERT hashL1 OKDUPS FAILED at i=%d result=%d\n", i, result);
  179.             }
  180. #endif
  181. #if DOTREE == 1
  182.             if((result = cfinsert_dupnum(hd1, lname1, strlen(lname1), &keyval, NULL)) < OK) {
  183.                 cfprintf("CFINSERT treeL1 OKDUPS FAILED at i=%d result=%d\n", i, result);
  184.             }
  185. #endif
  186.         }
  187.  
  188.  
  189.         /* LONG KEY with CNTDUPS */
  190.         for(i = 0; i < 20; ++i)
  191.         {
  192.             keyval.a0 = i+2;
  193. #if DOHASH == 1
  194.             dupcnt = 0;
  195.             if((result = cfinsert_dupnum(hd, lname2, strlen(lname2), &keyval, &dupcnt)) < OK) {
  196.                 cfprintf("CFINSERT hashL2 CNTDUPS FAILED at i=%d result=%d\n", i, result);
  197.             }
  198.             if(dupcnt != i+1)
  199.                 cfprintf("hashL2 CNTDUPS i=%d dupcnt=%d\n", i, dupcnt);
  200. #endif
  201. #if DOTREE == 1
  202.             dupcnt = 0;
  203.             if((result = cfinsert_dupnum(hd1, lname2, strlen(lname2), &keyval, &dupcnt)) < OK) {
  204.                 cfprintf("CFINSERT treeL2 CNTDUPS FAILED at i=%d result=%d\n", i, result);
  205.             }
  206.             if(dupcnt != i+1)
  207.                 cfprintf("treeL2 CNTDUPS i=%d dupcnt=%d\n", i, dupcnt);
  208. #endif
  209.         }
  210.     }/* END: if(cfisnew()) */
  211.  
  212.     /* CHECK IF DATA IS REALLY THERE */
  213.     /* USE CFFINDITEM */
  214.     /* 8 BYTE KEY with OKDUPS */
  215.     for(i = 0; i < 20; ++i)
  216.     {
  217.         keyval.a0 = i+2;
  218. #if DOHASH == 1
  219.         if((result = cffind_item(hd, keyname1, 8, &keyval)) != FOUND) {
  220.             cfprintf("CFFINDITEM hash OKDUPS FAILED at i=%d result=%d val=%d\n",
  221.             i, result, keyval.a0);
  222.         } else {
  223.             if(keyval.a0  != i+2)
  224.              cfprintf("CFFINDITEM hash OKDUPS returned wrong value=%d should be %d\n",
  225.                             keyval.a0, i+2);
  226.         }
  227. #endif
  228. #if DOTREE == 1
  229.         if((result = cffind_item(hd1, keyname1, 8, &keyval)) != FOUND) {
  230.             cfprintf("CFFINDITEM tree OKDUPS FAILED at i=%d result=%d val=%d\n",
  231.             i, result, keyval.a0);
  232.         } else {
  233.             if(keyval.a0 != i+2)
  234.              cfprintf("CFFINDITEM tree OKDUPS returned wrong value=%d should be %d\n",
  235.                             keyval.a0, i+2);
  236.         }
  237.  
  238. #endif
  239.     }
  240.  
  241.     /* 8 BYTE KEY with CNTDUPS */
  242.     for(i = 0; i < 20; ++i)
  243.     {
  244.         keyval.a0 = i+2;
  245. #if DOHASH == 1
  246.         if((result = cffind_item(hd, keyname2, 8, &keyval)) != FOUND) {
  247.             cfprintf("CFFINDITEM hash CNTDUPS FAILED at i=%d result=%d val=%d\n",
  248.             i, result, keyval.a0);
  249.         } else {
  250.           if(keyval.a0 != i+2)
  251.             cfprintf("CFFINDITEM hash CNTDUPS returned wrong value=%d should be %d\n",
  252.                             keyval.a0, i+2);
  253.         }
  254.  
  255. #endif
  256. #if DOTREE == 1
  257.         if((result = cffind_item(hd1, keyname2, 8, &keyval)) != FOUND) {
  258.             cfprintf("CFFINDITEM tree CNTDUPS FAILED at i=%d result=%d val=%d\n",
  259.             i, result, keyval.a0);
  260.         } else {
  261.             if(keyval.a0 != i+2)
  262.              cfprintf("CFFINDITEM tree CNTDUPS returned wrong value=%d should be %d\n",
  263.                             keyval.a0, i+2);
  264.         }
  265. #endif
  266.     }
  267.  
  268.     /* LONG KEY with OKDUPS */
  269.     for(i = 0; i < 20; ++i)
  270.     {
  271.         keyval.a0 = i+2;
  272. #if DOHASH == 1
  273.         if((result = cffind_item(hd, lname1, strlen(lname1), &keyval)) != FOUND) {
  274.             cfprintf("CFFINDITEM hashL1 OKDUPS FAILED at i=%d result=%d val=%d\n",
  275.             i, result, keyval.a0);
  276.         } else {
  277.             if(keyval.a0 != i+2)
  278.              cfprintf("CFFINDITEM hashL1 OKDUPS returned wrong value=%d should be %d\n",
  279.                             keyval.a0, i+2);
  280.         }
  281. #endif
  282. #if DOTREE == 1
  283.         if((result = cffind_item(hd1, lname1, strlen(lname1), &keyval)) != FOUND) {
  284.             cfprintf("CFFINDITEM treeL1 OKDUPS FAILED at i=%d result=%d val=%d\n",
  285.             i, result, keyval.a0);
  286.         } else {
  287.             if(keyval.a0 != i+2)
  288.              cfprintf("CFFINDITEM treeL1 OKDUPS returned wrong value=%d should be %d\n",
  289.                             keyval.a0, i+2);
  290.         }
  291. #endif
  292.     }
  293.  
  294.     /* LONG KEY with CNTDUPS */
  295.     for(i = 0; i < 20; ++i)
  296.     {
  297.         keyval.a0 = i+2;
  298. #if DOHASH == 1
  299.         if((result = cffind_item(hd, lname2, strlen(lname2), &keyval)) != FOUND) {
  300.             cfprintf("CFFINDITEM hashL2 CNTDUPS FAILED at i=%d result=%d val=%d\n",
  301.             i, result, keyval.a0);
  302.         } else {
  303.             if(keyval.a0 != i+2)
  304.              cfprintf("CFFINDITEM hashL2 CNTDUPS returned wrong value=%d should be %d\n",
  305.                             keyval.a0, i+2);
  306.         }
  307. #endif
  308. #if DOTREE == 1
  309.         if((result = cffind_item(hd1, lname2, strlen(lname2), &keyval)) != FOUND) {
  310.             cfprintf("CFFINDITEM treeL2 CNTDUPS FAILED at i=%d result=%d val=%d\n",
  311.             i, result, keyval.a0);
  312.         } else {
  313.             if(keyval.a0 != i+2)
  314.              cfprintf("CFFINDITEM treeL2 CNTDUPS returned wrong value=%d should be %d\n",
  315.                             keyval.a0, i+2);
  316.         }
  317. #endif
  318.     }
  319.  
  320.     /* CHECK IF DATA IS REALLY THERE */
  321.     /* USE CFFINDDUP */
  322.     /* 8 BYTE KEY with OKDUPS */
  323.     for(i = 0; i < 20; ++i)
  324.     {
  325. #if DOHASH == 1
  326.         keyval.a0 = 0;
  327.         if((result = cffind_dupnum(hd, keyname1, 8, &keyval, &i)) != FOUND) {
  328.             cfprintf("CFFINDDUP hash OKDUPS FAILED at i=%d result=%d val=%d\n",
  329.             i, result, keyval.a0);
  330.         } else {
  331.             if(keyval.a0 != i+2)
  332.              cfprintf("CFFINDDUP hash OKDUPS returned wrong value=%d should be %d\n",
  333.                             keyval.a0, i+2);
  334.         }
  335. #endif
  336. #if DOTREE == 1
  337.         keyval.a0 = 0;
  338.         if((result = cffind_dupnum(hd1, keyname1, 8, &keyval, &i)) != FOUND) {
  339.             cfprintf("CFFINDDUP tree OKDUPS FAILED at i=%d result=%d val=%d\n",
  340.             i, result, keyval.a0);
  341.         } else {
  342.             if(keyval.a0 != i+2)
  343.              cfprintf("CFFINDDUP tree OKDUPS returned wrong value=%d should be %d\n",
  344.                             keyval.a0, i+2);
  345.         }
  346. #endif
  347.     }
  348.  
  349.     /* 8 BYTE KEY with CNTDUPS */
  350.     for(i = 0; i < 20; ++i)
  351.     {
  352. #if DOHASH == 1
  353.         keyval.a0 = 0;
  354.         if((result = cffind_dupnum(hd, keyname2, 8, &keyval, &i)) != FOUND) {
  355.             cfprintf("CFFINDDUP hash CNTDUPS FAILED at i=%d result=%d val=%d\n",
  356.             i, result, keyval.a0);
  357.         } else {
  358.           if(keyval.a0 != i+2)
  359.             cfprintf("CFFINDDUP hash CNTDUPS returned wrong value=%d should be %d\n",
  360.                             keyval.a0, i+2);
  361.         }
  362. #endif
  363. #if DOTREE == 1
  364.         keyval.a0 = 0;
  365.         if((result = cffind_dupnum(hd1, keyname2, 8, &keyval, &i)) != FOUND) {
  366.             cfprintf("CFFINDDUP tree CNTDUPS FAILED at i=%d result=%d val=%d\n",
  367.             i, result, keyval.a0);
  368.         } else {
  369.             if(keyval.a0 != i+2)
  370.              cfprintf("CFFINDDUP tree CNTDUPS returned wrong value=%d should be %d\n",
  371.                             keyval.a0, i+2);
  372.         }
  373. #endif
  374.     }
  375.  
  376.     /* LONG KEY with OKDUPS */
  377.     for(i = 0; i < 20; ++i)
  378.     {
  379. #if DOHASH == 1
  380.         keyval.a0 = 0;
  381.         if((result = cffind_dupnum(hd, lname1, strlen(lname1), &keyval, &i)) != FOUND) {
  382.             cfprintf("CFFINDDUP hashL1 OKDUPS FAILED at i=%d result=%d val=%d\n",
  383.             i, result, keyval.a0);
  384.         } else {
  385.             if(keyval.a0 != i+2)
  386.              cfprintf("CFFINDDUP hashL1 OKDUPS returned wrong value=%d should be %d\n",
  387.                             keyval.a0, i+2);
  388.         }
  389. #endif
  390. #if DOTREE == 1
  391.         keyval.a0 = 0;
  392.         if((result = cffind_dupnum(hd1, lname1, strlen(lname1), &keyval, &i)) != FOUND) {
  393.             cfprintf("CFFINDDUP treeL1 OKDUPS FAILED at i=%d result=%d val=%d\n",
  394.             i, result, keyval.a0);
  395.         } else {
  396.             if(keyval.a0 != i+2)
  397.              cfprintf("CFFINDDUP treeL1 OKDUPS returned wrong value=%d should be %d\n",
  398.                             keyval.a0, i+2);
  399.         }
  400. #endif
  401.     }
  402.  
  403.     /* LONG KEY with CNTDUPS */
  404.     for(i = 0; i < 20; ++i)
  405.     {
  406. #if DOHASH == 1
  407.         keyval.a0 = 0;
  408.         if((result = cffind_dupnum(hd, lname2, strlen(lname2), &keyval, &i)) != FOUND) {
  409.             cfprintf("CFFINDDUP hashL2 CNTDUPS FAILED at i=%d result=%d val=%d\n",
  410.             i, result, keyval.a0);
  411.         } else {
  412.             if(keyval.a0 != i+2)
  413.              cfprintf("CFFINDDUP hashL2 CNTDUPS returned wrong value=%d should be %d\n",
  414.                             keyval.a0, i+2);
  415.         }
  416. #endif
  417. #if DOTREE == 1
  418.         keyval.a0 = 0;
  419.         if((result = cffind_dupnum(hd1, lname2, strlen(lname2), &keyval, &i)) != FOUND) {
  420.             cfprintf("CFFINDDUP treeL2 CNTDUPS FAILED at i=%d result=%d val=%d\n",
  421.             i, result, keyval.a0);
  422.         } else {
  423.             if(keyval.a0 != i+2)
  424.              cfprintf("CFFINDDUP treeL2 CNTDUPS returned wrong value=%d should be %d\n",
  425.                             keyval.a0, i+2);
  426.         }
  427. #endif
  428.     }
  429.  
  430.     /* CHECK THE LAST DUP OPTION OF CFFINDDUP */
  431. #if DOHASH == 1
  432.         keyval.a0 = 0;
  433.         i = -1;
  434.         if((result = cffind_dupnum(hd, keyname1, 8, &keyval, &i)) != FOUND)
  435.             cfprintf("CFFINDDUPLAST hash OKDUPS FAILED result=%d val=%d\n",
  436.             result, keyval.a0);
  437.         else if(keyval.a0 != 21)
  438.              cfprintf("CFFINDDUPLAST hash OKDUPS returned wrong value=%d should be 21\n",
  439.              keyval.a0);
  440.  
  441.         keyval.a0 = 0;
  442.         if((result = cffind_dupnum(hd, keyname2, 8, &keyval, &i)) != FOUND)
  443.             cfprintf("CFFINDDUPLAST hash CNTDUPS FAILED result=%d val=%d\n",
  444.             result, keyval.a0);
  445.         else if(keyval.a0 != 21)
  446.             cfprintf("CFFINDDUPLAST hash CNTDUPS returned wrong value=%d should be 21\n",
  447.             keyval.a0);
  448.  
  449.         keyval.a0 = 0;
  450.         if((result = cffind_dupnum(hd, lname1, strlen(lname1), &keyval, &i)) != FOUND)
  451.             cfprintf("CFFINDDUPLAST hashL1 OKDUPS FAILED result=%d val=%d\n",
  452.             result, keyval.a0);
  453.         else if(keyval.a0 != 21)
  454.             cfprintf("CFFINDDUPLAST hashL1 OKDUPS returned wrong value=%d should be 21\n",
  455.             keyval.a0);
  456.  
  457.         keyval.a0 = 0;
  458.         if((result = cffind_dupnum(hd, lname2, strlen(lname2), &keyval, &i)) != FOUND)
  459.             cfprintf("CFFINDDUPLAST hashL2 CNTDUPS FAILED result=%d val=%d\n",
  460.             result, keyval.a0);
  461.         else if(keyval.a0 != 21)
  462.              cfprintf("CFFINDDUPLAST hashL2 CNTDUPS returned wrong value=%d should be 21\n",
  463.              keyval.a0);
  464. #endif
  465. #if DOTREE == 1
  466.         keyval.a0 = 0;
  467.         i = -1;
  468.         if((result = cffind_dupnum(hd1, keyname1, 8, &keyval, &i)) != FOUND)
  469.             cfprintf("CFFINDDUPLAST tree OKDUPS FAILED result=%d val=%d\n",
  470.             result, keyval.a0);
  471.         else if(keyval.a0 != 21)
  472.              cfprintf("CFFINDDUPLAST tree OKDUPS returned wrong value=%d should be 21\n",
  473.              keyval.a0);
  474.  
  475.         keyval.a0 = 0;
  476.         if((result = cffind_dupnum(hd1, keyname2, 8, &keyval, &i)) != FOUND)
  477.             cfprintf("CFFINDDUPLAST tree CNTDUPS FAILED result=%d val=%d\n",
  478.             result, keyval.a0);
  479.         else if(keyval.a0 != 21)
  480.              cfprintf("CFFINDDUPLAST tree CNTDUPS returned wrong value=%d should be 21\n",
  481.              keyval.a0);
  482.  
  483.         keyval.a0 = 0;
  484.         if((result = cffind_dupnum(hd1, lname1, strlen(lname1), &keyval, &i)) != FOUND)
  485.             cfprintf("CFFINDDUPLAST treeL1 OKDUPS FAILED result=%d val=%d\n",
  486.             result, keyval.a0);
  487.         else if(keyval.a0 != 21)
  488.              cfprintf("CFFINDDUPLAST treeL1 OKDUPS returned wrong value=%d should be 21\n",
  489.              keyval.a0);
  490.  
  491.         keyval.a0 = 0;
  492.         if((result = cffind_dupnum(hd1, lname2, strlen(lname2), &keyval, &i)) != FOUND)
  493.             cfprintf("CFFINDDUPLAST treeL2 CNTDUPS FAILED result=%d val=%d\n",
  494.             result, (int)keyval.a0);
  495.         else if(keyval.a0 != 21)
  496.              cfprintf("CFFINDDUPLAST treeL2 CNTDUPS returned wrong value=%d should be 21\n",
  497.              keyval.a0);
  498. #endif
  499.  
  500.     /* CHECK THE CFFIND FUNCTION */
  501. #if DOHASH == 1
  502.         keyval.a0 = 0;
  503.         if((result = cffind(hd, keyname1, 8, &keyval)) != FOUND+1)
  504.             cfprintf("CFFIND hash OKDUPS failed result=%d\n",result);
  505.         else if(keyval.a0 != 2)
  506.             cfprintf("CFFIND hash OKDUPS returned wrong value %d should be 2\n", (int)keyval.a0);
  507.         keyval.a0 = 0;
  508.         if((result = cffind(hd, keyname2, 8, &keyval)) != FOUND+1)
  509.             cfprintf("CFFIND hash CNTDUPS failed result=%d\n",result);
  510.         else if(keyval.a0 != 2)
  511.             cfprintf("CFFIND hash OKDUPS returned wrong value %d should be 2\n", (int)keyval.a0);
  512.         keyval.a0 = 0;
  513.         if((result = cffind(hd, lname1, strlen(lname1), &keyval)) != FOUND+1)
  514.             cfprintf("CFFIND hashL1 OKDUPS failed result=%d\n",result);
  515.         else if(keyval.a0 != 2)
  516.             cfprintf("CFFIND hashL1 OKDUPS returned wrong value %d should be 2\n", (int)keyval.a0);
  517.         keyval.a0 = 0;
  518.         if((result = cffind(hd, lname2, strlen(lname1), &keyval)) != FOUND+1)
  519.             cfprintf("CFFIND hashL2 CNTDUPS failed result=%d\n",result);
  520.         else if(keyval.a0 != 2)
  521.             cfprintf("CFFIND hashL2 CNTDUPS returned wrong value %d should be 2\n", (int)keyval.a0);
  522. #endif
  523. #if DOTREE == 1
  524.         keyval.a0 = 0;
  525.         if((result = cffind(hd1, keyname1, 8, &keyval)) != FOUND+1)
  526.             cfprintf("CFFIND tree OKDUPS failed result=%d\n",result);
  527.         else if(keyval.a0 != 2)
  528.             cfprintf("CFFIND tree OKDUPS returned wrong value %d should be 2\n", (int)keyval.a0);
  529.         keyval.a0 = 0;
  530.         if((result = cffind(hd1, keyname2, 8, &keyval)) != FOUND+1)
  531.             cfprintf("CFFIND tree CNTDUPS failed result=%d\n",result);
  532.         else if(keyval.a0 != 2)
  533.             cfprintf("CFFIND tree CNTDUPS returned wrong value %d should be 2\n", (int)keyval.a0);
  534.         keyval.a0 = 0;
  535.         if((result = cffind(hd1, lname1, strlen(lname1),&keyval)) != FOUND+1)
  536.             cfprintf("CFFIND treeL1 OKDUPS failed result=%d\n",result);
  537.         else if(keyval.a0 != 2)
  538.             cfprintf("CFFIND treeL1 OKDUPS returned wrong value %d should be 2\n", (int)keyval.a0);
  539.         keyval.a0 = 0;
  540.         if((result = cffind(hd1, lname2, strlen(lname1), &keyval)) != FOUND+1)
  541.             cfprintf("CFFIND treeL2 CNTDUPS failed result=%d\n",result);
  542.         else if(keyval.a0 != 2)
  543.             cfprintf("CFFIND treeL2 returned wrong value %d should be 2\n", (int)keyval.a0);
  544. #endif
  545.  
  546.     /* TRY DELETING SOME DATA */
  547. #if DOHASH == 1
  548.  
  549.     if((result = cfdelete_lastdupnum(hd, keyname1, 8)) != OK)
  550.         cfprintf("DELETEDUP hash OKDUPS failed result=%d\n", result);
  551.     if((result = cfdelete_lastdupnum(hd, keyname2, 8)) != OK)
  552.         cfprintf("DELETEDUP hash CNTDUPS failed result=%d\n", result);
  553.     if((result = cfdelete_lastdupnum(hd, lname1, strlen(lname1))) != OK)
  554.         cfprintf("DELETEDUP hashL1 OKDUPS failed result=%d\n", result);
  555.     if((result = cfdelete_lastdupnum(hd, lname2, strlen(lname2))) != OK)
  556.         cfprintf("DELETEDUP hashL2 CNTDUPS failed result=%d\n", result);
  557. #endif
  558. #if DOTREE == 1
  559.  
  560.     if((result = cfdelete_lastdupnum(hd1, keyname1, 8)) != OK)
  561.         cfprintf("DELETEDUP tree OKDUPS failed result=%d\n", result);
  562.     if((result = cfdelete_lastdupnum(hd1, keyname2, 8)) != OK)
  563.         cfprintf("DELETEDUP tree CNTDUPS failed result=%d\n", result);
  564.     if((result = cfdelete_lastdupnum(hd1, lname1, strlen(lname1))) != OK)
  565.         cfprintf("DELETEDUP treeL1 OKDUPS failed result=%d\n", result);
  566.     if((result = cfdelete_lastdupnum(hd1, lname2, strlen(lname2))) != OK)
  567.         cfprintf("DELETEDUP treeL2 CNTDUPS failed result=%d\n", result);
  568. #endif
  569.  
  570.     /* CHECK THE COUNT DUPS FUNCTION */
  571. #if DOHASH == 1
  572.     if((result = cfcountdups(hd, keyname1, 8)) != 19)
  573.         cfprintf("COUNTDUPS hash OKDUPS =%d should be 19\n",result);
  574.     if((result = cfcountdups(hd, keyname2, 8)) != 19)
  575.         cfprintf("COUNTDUPS hash CNTDUPS =%d should be 19\n",result);
  576.     if((result = cfcountdups(hd, lname1, strlen(lname1))) != 19)
  577.         cfprintf("COUNTDUPS hashL1 OKDUPS =%d should be 19\n",result);
  578.     if((result = cfcountdups(hd, lname2, strlen(lname1))) != 19)
  579.         cfprintf("COUNTDUPS hashL2 CNTDUPS =%d should be 19\n",result);
  580. #endif
  581. #if DOTREE == 1
  582.     if((result = cfcountdups(hd1, keyname1, 8)) != 19)
  583.         cfprintf("COUNTDUPS tree OKDUPS =%d should be 19\n",result);
  584.     if((result = cfcountdups(hd1, keyname2, 8)) != 19)
  585.         cfprintf("COUNTDUPS tree CNTDUPS =%d should be 19\n",result);
  586.     if((result = cfcountdups(hd1, lname1, strlen(lname1))) != 19)
  587.         cfprintf("COUNTDUPS treeL1 OKDUPS =%d should be 19\n",result);
  588.     if((result = cfcountdups(hd1, lname2, strlen(lname1))) != 19)
  589.         cfprintf("COUNTDUPS treeL2 CNTDUPS =%d should be 19\n",result);
  590. #endif
  591.  
  592.  
  593.     /* CONFIRM THAT THE LAST DUP WAS DELETED */
  594. #if DOHASH == 1
  595.         keyval.a0 = 0;
  596.         i = -1;
  597.         if((result = cffind_dupnum(hd, keyname1, 8, &keyval, &i)) != FOUND)
  598.             cfprintf("CFFINDDUPLAST hash OKDUPS FAILED result=%d val=%d\n",
  599.             result, keyval.a0);
  600.         else if(keyval.a0 != 20)
  601.              cfprintf("CFFINDDUPLAST hash OKDUPS returned wrong value=%d should be 21\n",
  602.              keyval.a0);
  603.  
  604.         keyval.a0 = 0;
  605.         if((result = cffind_dupnum(hd, keyname2, 8, &keyval, &i)) != FOUND)
  606.             cfprintf("CFFINDDUPLAST hash CNTDUPS FAILED result=%d val=%d\n",
  607.             result, keyval.a0);
  608.         else if(keyval.a0 != 20)
  609.             cfprintf("CFFINDDUPLAST hash CNTDUPS returned wrong value=%d should be 21\n",
  610.             keyval.a0);
  611.  
  612.         keyval.a0 = 0;
  613.         if((result = cffind_dupnum(hd, lname1, strlen(lname1), &keyval, &i)) != FOUND)
  614.             cfprintf("CFFINDDUPLAST hashL1 OKDUPS FAILED result=%d val=%d\n",
  615.             result, keyval.a0);
  616.         else if(keyval.a0 != 20)
  617.             cfprintf("CFFINDDUPLAST hashL1 OKDUPS returned wrong value=%d should be 21\n",
  618.             keyval.a0);
  619.  
  620.         keyval.a0 = 0;
  621.         if((result = cffind_dupnum(hd, lname2, strlen(lname2), &keyval, &i)) != FOUND)
  622.             cfprintf("CFFINDDUPLAST hashL2 CNTDUPS FAILED result=%d val=%d\n",
  623.             result, keyval.a0);
  624.         else if(keyval.a0 != 20)
  625.              cfprintf("CFFINDDUPLAST hashL2 CNTDUPS returned wrong value=%d should be 21\n",
  626.              keyval.a0);
  627. #endif
  628. #if DOTREE == 1
  629.         keyval.a0 = 0;
  630.         i = -1;
  631.         if((result = cffind_dupnum(hd1, keyname1, 8, &keyval, &i)) != FOUND)
  632.             cfprintf("CFFINDDUPLAST tree OKDUPS FAILED result=%d val=%d\n",
  633.             result, keyval.a0);
  634.         else if(keyval.a0 != 20)
  635.              cfprintf("CFFINDDUPLAST tree OKDUPS returned wrong value=%d should be 21\n",
  636.              keyval.a0);
  637.  
  638.         keyval.a0 = 0;
  639.         if((result = cffind_dupnum(hd1, keyname2, 8, &keyval, &i)) != FOUND)
  640.             cfprintf("CFFINDDUPLAST tree CNTDUPS FAILED result=%d val=%d\n",
  641.             result, keyval.a0);
  642.         else if(keyval.a0 != 20)
  643.              cfprintf("CFFINDDUPLAST tree CNTDUPS returned wrong value=%d should be 21\n",
  644.              keyval.a0);
  645.  
  646.         keyval.a0 = 0;
  647.         if((result = cffind_dupnum(hd1, lname1, strlen(lname1), &keyval, &i)) != FOUND)
  648.             cfprintf("CFFINDDUPLAST treeL1 OKDUPS FAILED result=%d val=%d\n",
  649.             result, keyval.a0);
  650.         else if(keyval.a0 != 20)
  651.              cfprintf("CFFINDDUPLAST treeL1 OKDUPS returned wrong value=%d should be 21\n",
  652.              keyval.a0);
  653.  
  654.         keyval.a0 = 0;
  655.         if((result = cffind_dupnum(hd1, lname2, strlen(lname2), &keyval, &i)) != FOUND)
  656.             cfprintf("CFFINDDUPLAST treeL2 CNTDUPS FAILED result=%d val=%d\n",
  657.             result, keyval.a0);
  658.         else if(keyval.a0 != 20)
  659.              cfprintf("CFFINDDUPLAST treeL2 CNTDUPS returned wrong value=%d should be 21\n",
  660.              keyval.a0);
  661. #endif
  662.  
  663.     /* RESTORE THE LAST DUP SO REOPEN WILL WORK*/
  664.     keyval.a0 = 19+2;
  665. #if DOHASH == 1
  666.     if((result = cfinsert_dupnum(hd, keyname1, 8, &keyval, NULL)) < OK)
  667.         cfprintf("CFREINSERT hash OKDUPS FAILED result=%d\n", result);
  668.     if((result = cfinsert_dupnum(hd, keyname2, 8, &keyval, NULL)) < OK)
  669.         cfprintf("CFREINSERT hash OKDUPS FAILED result=%d\n", result);
  670.     if((result = cfinsert_dupnum(hd, lname1, strlen(lname1), &keyval, NULL)) < OK)
  671.         cfprintf("CFREINSERT hashL1 OKDUPS FAILED result=%d\n", result);
  672.     if((result = cfinsert_dupnum(hd, lname2, strlen(lname2), &keyval, NULL)) < OK)
  673.         cfprintf("CFREINSERT hashL2 OKDUPS FAILED result=%d\n", result);
  674. #endif
  675. #if DOTREE == 1
  676.     if((result = cfinsert_dupnum(hd1, keyname1, 8, &keyval, NULL)) < OK)
  677.         cfprintf("CFREINSERT tree OKDUPS FAILED result=%d\n", result);
  678.     if((result = cfinsert_dupnum(hd1, keyname2, 8, &keyval, NULL)) < OK)
  679.         cfprintf("CFREINSERT tree OKDUPS FAILED result=%d\n", result);
  680.     if((result = cfinsert_dupnum(hd1, lname1, strlen(lname1), &keyval, NULL)) < OK)
  681.         cfprintf("CFREINSERT treeL1 OKDUPS FAILED result=%d\n", result);
  682.     if((result = cfinsert_dupnum(hd1, lname2, strlen(lname2), &keyval, NULL)) < OK)
  683.         cfprintf("CFREINSERT treeL2 OKDUPS FAILED result=%d\n", result);
  684. #endif
  685.     cfprintf("End dup_test1\n");
  686. }
  687.  
  688.  
  689. static void
  690. dup_test2(void *hd, void *hd1)
  691. {
  692. char *keyname3 = "keyname3";
  693. int result;
  694. long i;
  695. DupName dupname;
  696. DupName testname;
  697.  
  698.     cfprintf("Begin dup_test2 DUPNAMES\n");
  699.     if(cfisnew(hd))
  700.     {/* INITIAL DATA  ENTRY */
  701.         for(i = 0; i < 20; ++i)
  702.         {
  703.           keyval.a0 = i+2;
  704. #if DOHASH == 1
  705.           dupname.name = 0;
  706.           dupname.xname = 0;
  707.           dupname.id = 0;
  708.  
  709.           if((result = cfinsert_dupname(hd, keyname3, 8, &keyval, &dupname)) < OK) {
  710.             cfprintf("CFINSERT hash DUPNAMES FAILED at i=%d result=%d\n", i, result);
  711.           }
  712.           if(dupname.id != 2 || dupname.name != i+1)
  713.               cfprintf("hash DUPNAME wrong, should be:2,%d is %d,%d\n",
  714.                       i+1, dupname.id, dupname.name);
  715.  
  716.           newval.a0 = 0;
  717.           if((result = cffind_dupname(hd, &dupname, &newval)) != FOUND) {
  718.               cfprintf("CFFIND hash DUPNAMES FAILED at i=%d result=%d\n", i, result);
  719.           }
  720.           if(newval.a0 != i+2)
  721.             cfprintf("CFFIND hash DUPNAMES returned wrong value %d should be %d\n", newval.a0, i+2);
  722.  
  723. #endif
  724. #if DOTREE == 1
  725.           dupname.name = 0;
  726.           dupname.xname = 0;
  727.           dupname.id = 0;
  728.  
  729.           if((result = cfinsert_dupname(hd1, keyname3, 8, &keyval, &dupname)) < OK) {
  730.             cfprintf("CFINSERT tree DUPNAMES FAILED at i=%d result=%d\n", i, result);
  731.           }
  732.           if(dupname.id != 2 || dupname.name != i+1)
  733.               cfprintf("tree DUPNAME wrong, should be:2,%d is %d,%d\n",
  734.                       i+1, dupname.id, dupname.name);
  735.  
  736.           newval.a0 = 0;
  737.           if((result = cffind_dupname(hd1, &dupname, &newval)) != FOUND) {
  738.               cfprintf("CFFIND tree DUPNAMES FAILED at i=%d result=%d\n", i, result);
  739.           }
  740.           if(newval.a0 != i+2)
  741.             cfprintf("CFFIND tree DUPNAMES returned wrong value %d should be %d\n", newval.a0, i+2);
  742.  
  743. #endif
  744.         }/* END: for(i,20,) */
  745.  
  746. #if DOHASH == 1
  747.         /* CHECK THAT THERE ARE EXACTLY 20 DUPNAMES */
  748.  
  749.         if((result = cfcountdups(hd,keyname3,8)) != 20)
  750.             cfprintf("COUNTDUPS hash DUPNAMES  =%d should be 20\n", result);
  751.  
  752.         /* DELETE THE LAST DUPNAME AND CHECK THE BOOKKEEPING */
  753.  
  754.         if((result = cfdelete_lastdupname(hd, keyname3, 8)) != OK)
  755.             cfprintf("DELETE LASTDUPNAME hash failed. result=%d\n", result);
  756.         if((result = cflastdupname(hd, keyname3, 8, &testname)) != OK)
  757.             cfprintf("GET LASTDUPNAME hash failed. result = %d\n", result);
  758.         if(testname.id != 2 || testname.name != 19)
  759.               cfprintf("hash LASTDUPNAME wrong, should be:2,%d is %d,%d\n",
  760.                       19, testname.id, testname.name);
  761.         if((result = cfcountdups(hd,keyname3,8)) != 19)
  762.             cfprintf("COUNTDUPS hash DUPNAMES  =%d should be 19\n", result);
  763. #endif
  764. #if DOTREE == 1
  765.         /* CHECK THAT THERE ARE EXACTLY 20 DUPNAMES */
  766.  
  767.         if((result = cfcountdups(hd1,keyname3,8)) != 20)
  768.             cfprintf("COUNTDUPS tree DUPNAMES =%d should be 20\n", result);
  769.  
  770.         /* DELETE THE LAST DUPNAME AND CHECK THE BOOKKEEPING */
  771.  
  772.         if((result = cfdelete_lastdupname(hd1, keyname3, 8)) != OK)
  773.             cfprintf("DELETE LASTDUPNAME tree failed. result=%d\n", result);
  774.         if((result = cflastdupname(hd1, keyname3, 8, &testname)) != OK)
  775.             cfprintf("GET LASTDUPNAME tree failed. result = %d\n", result);
  776.         if(testname.id != 2 || testname.name != 19)
  777.               cfprintf("tree LASTDUPNAME wrong, should be:2,%d is %d,%d\n",
  778.                       19, testname.id, testname.name);        
  779.         if((result = cfcountdups(hd1,keyname3,8)) != 19)
  780.             cfprintf("COUNTDUPS tree DUPNAMES =%d should be 19\n", result);
  781. #endif
  782.  
  783.         /* DELETE A COUPLE OF DUPNAMES IN THE MIDDLE AND CHECK THE BOOKKEEPING */
  784.  
  785.         dupname.name = 0;
  786.         dupname.xname = 0;
  787.         dupname.id = 2;
  788. #if DOHASH == 1
  789.         dupname.name = 13;
  790.         if((result = cfdelete_dupname(hd,keyname3,8,&dupname)) != OK)
  791.             cfprintf("DELETEDUPNAME 13 hash failed. result=%d\n", result);
  792.         dupname.name = 5;
  793.         if((result = cfdelete_dupname(hd,keyname3,8,&dupname)) != OK)
  794.             cfprintf("DELETEDUPNAME 5 hash failed. result=%d\n", result);
  795.  
  796.         if((result = cflastdupname(hd, keyname3, 8, &testname)) != OK)
  797.             cfprintf("GET LASTDUPNAME hash failed. result = %d\n", result);
  798.         if(testname.id != 2 || testname.name != 19)
  799.               cfprintf("hash LASTDUPNAME wrong, should be:2,%d is %d,%d\n",
  800.                       19, testname.id, testname.name);        
  801.         if((result = cfcountdups(hd,keyname3,8)) != 17)
  802.             cfprintf("COUNTDUPS tree DUPNAMES =%d should be 17\n", result);
  803. #endif
  804. #if DOTREE == 1
  805.         dupname.name = 13;
  806.         if((result = cfdelete_dupname(hd1,keyname3,8,&dupname)) != OK)
  807.             cfprintf("DELETEDUPNAME 13 tree failed. result=%d\n", result);
  808.         dupname.name = 5;
  809.         if((result = cfdelete_dupname(hd1,keyname3,8,&dupname)) != OK)
  810.             cfprintf("DELETEDUPNAME 5 tree failed. result=%d\n", result);
  811.  
  812.         if((result = cflastdupname(hd1, keyname3, 8, &testname)) != OK)
  813.             cfprintf("GET LASTDUPNAME tree failed. result = %d\n", result);
  814.         if(testname.id != 2 || testname.name != 19)
  815.               cfprintf("tree LASTDUPNAME wrong, should be:2,%d is %d,%d\n",
  816.                       19, testname.id, testname.name);        
  817.         if((result = cfcountdups(hd1,keyname3,8)) != 17)
  818.             cfprintf("COUNTDUPS tree DUPNAMES =%d should be 17\n", result);
  819. #endif
  820.  
  821.     }    
  822.     /* DELETE ALL THE REMAINING DUPNAMES */
  823. #if DOHASH == 1
  824.     if(!cfisnew(hd)) {
  825.         if((result = cfdelete_alldupnames(hd, keyname3, 8)) != OK)
  826.             cfprintf("DELETE all dupnames hash failed. result=%d\n", result);
  827.         if((result = cflastdupname(hd, keyname3, 8, &testname)) == OK)
  828.             cfprintf("GET LASTDUPNAME hash failed. result = %d\n", result);
  829.         if((result = cfcountdups(hd,keyname3,8)) != -1)
  830.             cfprintf("COUNTDUPS tree DUPNAMES =%d should be -1\n", result);
  831.     }
  832. #endif
  833. #if DOTREE == 1
  834.     if(!cfisnew(hd1)) {
  835.         if((result = cfdelete_alldupnames(hd1, keyname3, 8)) != OK)
  836.             cfprintf("DELETE all dupnames tree failed. result=%d\n", result);
  837.         if((result = cflastdupname(hd1, keyname3, 8, &testname)) == OK)
  838.             cfprintf("GET LASTDUPNAME hash failed. result = %d\n", result);
  839.         if((result = cfcountdups(hd1,keyname3,8)) != -1)
  840.             cfprintf("COUNTDUPS tree DUPNAMES =%d should be -1\n", result);
  841.     }
  842. #endif
  843.     cfprintf("End dup_test2\n");
  844.